package cn.edu.hnu.gpg.util;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

public class EnumUtils {

    /**
     * 带 {@code value} 与注释 {@code comment} 的枚举类接口
     * @param <V> {@code getValue()} 返回值的类型
     */
    public interface RemarkedEnum {
        // 枚举量的注释
        String getRemark();
    }

    /**
     * 根据枚举类型的 {@code name} 找到对应的枚举常量。
     * @param name 目标枚举量的 {@code value}
     * @param type 目标枚举量的 class。必须为 Enum
     * @return 找到的符合条件的枚举量。不存在时返回 {@code null}。
     */
    public static <E extends Enum> E enumWithName(String name, Class<E> type) {

        E targetEnum = null;
        E[] enums = type.getEnumConstants();
        for (E e : enums) {
            if (e.name().equals(name)) {
                targetEnum = e;
                break;
            }
        }

        return targetEnum;
    }

}
